package main;

import java.awt.image.BufferedImage;
import java.io.File;
import java.net.URL;
import java.util.List;

import javax.imageio.ImageIO;

import com.gargoylesoftware.htmlunit.IncorrectnessListener;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.html.HtmlImage;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class WebReader {
	
	
	
	public void readEOL(){
		String url = "http://www.elotrolado.net/hilo_carteles-emotivos-warning-56kb-4_1000480_s";
		threadReader(url);
		System.out.println("Fin");
	}
	
	private void threadReader(String startUrl){
		System.out.println("////////INICIO///////////");
		
		Integer empezar;
		
		try{
			empezar = main.IOOperations.readStatus();
			System.out.println("Empiezo por la pagina: "+empezar);
		}catch (Exception e) {
			main.IOOperations.saveStatus(0);
			empezar = 1;
		}
		
		String url = startUrl;
		
		for(int i=empezar; i<1000; i++){
			System.out.println("=================================================================================================================");
			System.out.println("Leyendo pagina "+i);
			System.out.println(url+( (i*10)-10     ));
			main.IOOperations.saveStatus(i);
			readPage(url+i);
			System.out.println("Fin de pagina "+i+", esperando 5 sec...");
			
			//Para no saturar mucho el servidor, esperamos 5 seg entre pagina y pagina
			Thread.currentThread();
			System.out.println("1...");
			try{
			Thread.sleep(1000);
			System.out.println("2...");
			Thread.sleep(1000);
			System.out.println("3...");
			Thread.sleep(1000);
			System.out.println("4...");
			Thread.sleep(1000);
			System.out.println("5...");
			Thread.sleep(1000);
			}catch (Exception e) {
				System.out.println("No se pudo poner a dormir el hilo actual");
			}
		}
		
	}
	

	@SuppressWarnings("unchecked")
	private void readPage(String url){
		try{
		
		final WebClient webClient = new WebClient();	
		final IncorrectnessListener il = new MyIncorrectnessListener(); 
		webClient.setIncorrectnessListener(il); 
		webClient.setJavaScriptEnabled(false); 
	    final HtmlPage page = webClient.getPage(url);
	    
	    
	    /**********************************************************************
	     * Este trozo de codigo intentara buscar en las etiquetas <img>     ***
	     **********************************************************************/
	    final List<HtmlImage> imgs = (List<HtmlImage>) page.getByXPath("//img");
	    for(HtmlImage i:imgs){
	    	String srcImage = i.getSrcAttribute();
	    	
	    	if(srcImage.matches("^http.*")){
	    		System.out.println(srcImage);
	    		saveImageFromUrl(srcImage);
	    	}
	    	
	    }
	    
	    /**********************************************************************
	     * Este trozo de codigo intentara buscar tambien en las etiquetas <a>**
	     **********************************************************************/
	    
//	    final List<HtmlAnchor> anchors = (List<HtmlAnchor>) page.getByXPath("//a");
//	    for (HtmlAnchor aux:anchors){
//	    	String href = aux.getHrefAttribute();
//	    	
//	    	if(href.matches("^http.*")){
//		    	System.out.println(href);
//		    	saveImageFromUrl(href);
//	    	}
//	    }
	    
	    //Cierro las ventanas abiertas
		
	    webClient.closeAllWindows();
		}catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
	private void saveImageFromUrl(String srcImage){
		
		try{
			//En caso de ser una imagen, me quedo con las ultimas 3 letras, si no, le pongo por defecto jpg
			String fileExtension = srcImage.substring((srcImage.length()-3) , (srcImage.length()));
			if(!fileExtension.equals("jpg") || !fileExtension.equals("png") ||  !fileExtension.equals("gif")){
				fileExtension = "jpg";
			}	
			
			//Obtenemos el nombre del archivo
			String[] parsear =srcImage.split("/");
			String nombreArchivo = parsear[parsear.length-1];
			
			
			BufferedImage image = null;
	 
	            URL url = new URL(srcImage);
	            try{
	            image = ImageIO.read(url);
	            
	            //Es un filtro para evitar imagenes pequeñas de avatares y similares
	            if (image.getWidth() > 90 && image.getHeight() > 450){ 
	            	ImageIO.write(image, fileExtension,new File("D:\\Temp\\"+nombreArchivo));
	            	System.out.println("Imagen guardada... "+nombreArchivo);
	            	}
	            }
	            catch (Exception e) {
					System.out.println("Imagen no encontrada... Pasando a la siguiente");
				}
	
			}catch (Exception e) {
				System.out.println("La URL no parece contener una imagen... Pasando a la siguiente");
			}
		
	}
}
